import java.util.*;

public class Printer {
    public int[] clockwisePrint(int[][] mat, int n, int m) {//n行数
        // 可以采用递归的思想，旋转一圈后，n--，m--；起点为[mat.length-n][mat.length-n]
        //出口情况是剩下四个、一个、横着或者竖着的两个
        int xStart=mat.length-n;
        int yStart=mat.length-n;
        int[] result=new int[n*m];
        if(n==1&&m==1){
            result=new int[]{mat[xStart][yStart]};
            return result;
        }
        if(n==2&&m==2){
            result=new int[]{mat[mat.length-n][mat.length-n],mat[mat.length-n][mat.length-n+1],
                            mat[mat.length-n+1][mat.length-n+1],mat[mat.length-n+1][mat.length-n]};
            return result;
        }
        else if(n==1&&m==2){
            result=new int[]{mat[xStart][yStart],mat[xStart][yStart+1]};
            return result;
        }else if(n==2&&m==1){
        	result=new int[]{mat[xStart][yStart],mat[xStart+1][yStart]};
        	return result;
        }
        int curIndex=0;
        int xEnd=xStart+n;
        int yEnd=yStart+m;
        for(int j=yStart;j<yEnd;j++){//向右
            result[curIndex]=mat[xStart][j];
            curIndex++;
        }
        for(int i=xStart+1;i<xEnd;i++){//向下
            result[curIndex]=mat[i][yEnd-1];
            curIndex++;
        }
        for(int j=yEnd-2;j>=yStart;j--){
            result[curIndex]=mat[xEnd-1][j];
            curIndex++;
        }
        for(int i=xEnd-2;i>xStart;i--){//向上
        	result[curIndex]=mat[i][yStart];
            curIndex++;
        }
        
        int[] childResult=clockwisePrint(mat,n-2,m-2);
        for(int chld:childResult){
            result[curIndex]=chld;
            curIndex++;
        }
        return result;
    }
    
    public static void main(String[] args) {
		Printer printer=new Printer();
		int[][] mat=new int[][]{{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
		int[] result=printer.clockwisePrint(mat, mat.length,mat[0].length);
		for (int i : result) {
			System.out.println(i);
		}
	}
}
